import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 任意4个不同的数字 随机组合相乘后得到的还是由这四个数字组成的，交换律算一个
 */
public class Test04 {
    static int cnt = 0;

    // 判断一个数组里的元素是否各不相同
    static boolean isBuTong(int[] x) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < x.length; i++) {
            set.add(x[i]);
        }
        return x.length == set.size();
    }

    public static void main(String[] args) {
        for (int n = 1000; n < 9999; n++) {
            int[] store = { n / 1000, n / 100 % 10, n / 10 % 10, n % 10 };
            Arrays.sort(store); // 对数组进行排序
            if (isBuTong(store)) { // 各位数字各不相同

                // 找较小乘数为1位数字的情况
                for (int i = 0; i < store.length; i++) {
                    if (store[i] == 0) // 第一个数字为1位数，不能为0
                        continue;
                    // 判断商能否被第一个数整除，并将两个乘数的各位数字放到数组nStore中，比较nStore里的元素与store里是否完全相同
                    if (n % store[i] == 0 ) {
                        int t = n / store[i];
                        int[] nStore = { store[i], t / 100, t / 10 % 10, t % 10 };
                        Arrays.sort(nStore);
                        boolean f = true;
                        for (int j = 0; j < 4; j++) {
                            if (store[j] != nStore[j]) {
                                f = false;
                                break;
                            }
                        }
                        if (f) {
                            cnt++; // 相同则cnt加一
                            System.out.println(store[i] + "x" + t + "=" + n);
                        }
                    }
                }
                // 找较小乘数为2位数字的情况
                for (int i = 0; i < store.length; i++) {
                    if (store[i] == 0) // 第一个乘数十位数不能为0
                        continue;
                    for (int j = 0; j < store.length; j++) {
                        int first = store[i] * 10 + store[j]; // 第一个乘数
                        if (n % first == 0 ) {
                            int sec = n / first; // 第二个乘数
                            int[] nStore = { store[i], store[j], sec / 10,
                                    sec % 10 };
                            Arrays.sort(nStore);
                            boolean f = true;
                            for (int k = 0; k < nStore.length; k++) {
                                if (store[k] != nStore[k]) {
                                    f = false;
                                    break;
                                }
                            }
                            if (f && first <= sec) {
                                cnt++; // 相同则cnt加一
                                System.out.println(first + "x" + sec + "=" + n);
                            }
                        }
                    }
                }
            }
        }
        System.out.println(cnt + "种");
    }
}
